package vg.services.main_manager;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import vg.services.config_manager.IConfigManager;
import vg.services.config_manager.ConfigManager;
import vg.services.data_base_manager.interfaces.IModel;
import vg.services.data_base_manager.realization.SQLite4JavaCacheModel;
import vg.services.graph_layout_manager.GraphLayoutManager;
import vg.services.graph_layout_manager.interfaces.IGraphLayoutManager;
import vg.services.graph_view_manager.GraphViewManager;
import vg.services.graph_view_manager.interfaces.IGraphViewManager;
import vg.services.log_manager.LogManager;
import vg.services.log_manager.interfaces.ILog;
import vg.services.log_manager.interfaces.ILogManager;
import vg.services.log_manager.interfaces.IWindowMessage;
import vg.services.plugin_manager.realization.PluginParameter;
import vg.services.progress_manager.SimpleProgressManager;
import vg.services.progress_manager.interfaces.IProgressManager;
import vg.services.user_interface_manager.UserInterfaceManager;

/**
 * This class contains links to all system services. 
 * @author tzolotuhin
 */
public class MainManager {
	public static final IConfigManager config = ConfigManager.getInstance();
	
	// Log services
	public static final ILogManager logManager = new LogManager();
	public static final ILog log = logManager.getLog();
	public static final IWindowMessage windowMessage = logManager.getWindowMessage();
	
	public static final IModel model = new SQLite4JavaCacheModel();
	public static final UserInterfaceManager view = new UserInterfaceManager(model, "Welcome to Visual Graph");
	public static final PluginParameter pluginParameter = new PluginParameter(model, view);
	
	public static final IProgressManager progressManager = new SimpleProgressManager();
	public static final ExecutorService threadPool = Executors.newSingleThreadExecutor();
	public static final IGraphLayoutManager graphLayoutManager = new GraphLayoutManager();
	public static final IGraphViewManager graphViewManager = new GraphViewManager();
	
	/**
	 * Constructor.
	 */
	public MainManager() {
		// TODO
	}
}
